录制和回放数据 |
您所在的位置:网站首页 › ros2 topic list 不输出了 › 录制和回放数据 |
录制和回放数据
目标: 记录发布在某个主题上的数据,以便随时回放和检查。 教程级别: 初学者 时间: 10分钟 内容 背景 先决条件 任务 1 设置 2 选择一个主题 3 ros2 bag record 4 ros2 bag info 5 ros2 bag play 总结 下一步 相关内容 背景ros2 bag 是一个命令行工具,用于记录系统中发布在主题上的数据。它会累积通过任意数量的主题传递的数据,并将其保存在数据库中。然后,您可以回放这些数据,以重现您的测试和实验结果。记录主题也是分享您的工作并允许他人重新创建的好方法。 先决条件您应该将``ros2 bag``作为常规ROS 2安装的一部分进行安装。 如果您在Linux上从Debian软件包安装了ROS,而您的系统无法识别该命令,请按照以下方式进行安装: sudo apt-get install ros-humble-ros2bag \ ros-humble-rosbag2-storage-default-plugins本教程讲解了之前教程中涉及的概念,例如:doc:节点。它还使用了:doc:turtlesim package。 像往常一样,在 每个新开的终端中 都不要忘记加载 ROS 2 。 任务 1 设置您将在``turtlesim``系统中记录您的键盘输入,以便稍后保存和回放,请先启动``/turtlesim``和``/teleop_turtle``节点。 打开一个新的终端并运行: ros2 run turtlesim turtlesim_node打开另一个终端并运行: ros2 run turtlesim turtle_teleop_key我们还可以创建一个新目录来存储我们的保存录音,这样做是一个好的实践: mkdir bag_files cd bag_files 2 选择一个主题ros2 bag 只能记录发布在主题中的消息数据。要查看系统的主题列表,请打开一个新终端并运行以下命令: ros2 topic list将返回: /parameter_events /rosout /turtle1/cmd_vel /turtle1/color_sensor /turtle1/pose在主题教程中,你学到了 /turtle_teleop 节点在 /turtle1/cmd_vel 主题上发布命令,使乌龟在 turtlesim 中移动。 要查看 /turtle1/cmd_vel 发布的数据,请运行以下命令: ros2 topic echo /turtle1/cmd_vel一开始不会显示任何内容,因为 teleop 没有发布任何数据。返回到运行 teleop 的终端并选择它,使其处于活动状态。使用箭头键来移动乌龟,你将在运行 ros2 topic echo 的终端上看到数据被发布。 linear: x: 2.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0 --- 3 ros2 bag record要记录发布到一个话题上的数据,请使用以下命令语法: ros2 bag record在对所选择的话题运行此命令之前,请打开一个新的终端并进入之前创建的``bag_files``目录,因为rosbag文件将保存在您运行命令的目录中。 运行以下命令: ros2 bag record /turtle1/cmd_vel你将在终端中看到以下消息(日期和时间会有所不同): [INFO] [rosbag2_storage]: Opened database 'rosbag2_2019_10_11-05_18_45'. [INFO] [rosbag2_transport]: Listening for topics... [INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/cmd_vel' [INFO] [rosbag2_transport]: All requested topics are subscribed. Stopping discovery...现在``ros2 bag``正在记录发布在``/turtle1/cmd_vel``话题上的数据。返回到teleop终端并再次移动乌龟。移动的具体方式不重要,但尽量制造一个可识别的模式,以便在稍后回放数据时进行观察。 按下``Ctrl+C``停止记录。 数据将累积在一个新的袋子目录中,目录的命名方式为``rosbag2_year_month_day-hour_minute_second``。该目录将包含一个``metadata.yaml``文件和以记录格式保存的袋子文件。 3.1 记录多个主题您还可以记录多个主题,并更改文件“ros2 bag”保存的名称。 运行以下命令: ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose``-o``选项允许您为您的包文件选择一个唯一的名称。在这种情况下,下面的字符串``subset``是文件名。 要同时记录多个主题,只需用空格分隔每个主题。 您将看到以下消息,确认正在记录两个主题。 [INFO] [rosbag2_storage]: Opened database 'subset'. [INFO] [rosbag2_transport]: Listening for topics... [INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/cmd_vel' [INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/pose' [INFO] [rosbag2_transport]: All requested topics are subscribed. Stopping discovery...您可以移动海龟并在完成后按``Ctrl+C``。 注解 您还可以在命令中添加另一个选项``-a``,该选项记录系统上的所有主题。 4 ros2 bag info运行以下命令可查看有关您的记录的详细信息: ros2 bag info在``subset``包文件上运行此命令将返回文件的信息列表: ros2 bag info subset Files: subset.db3 Bag size: 228.5 KiB Storage id: sqlite3 Duration: 48.47s Start: Oct 11 2019 06:09:09.12 (1570799349.12) End Oct 11 2019 06:09:57.60 (1570799397.60) Messages: 3013 Topic information: Topic: /turtle1/cmd_vel | Type: geometry_msgs/msg/Twist | Count: 9 | Serialization Format: cdr Topic: /turtle1/pose | Type: turtlesim/msg/Pose | Count: 3004 | Serialization Format: cdr要查看单个消息,您需要打开数据库,例如sqlite3,在其中进行检查,这超出了ROS 2的范围。 5 ros2 bag play在重新播放bag文件之前,在运行teleop的终端中输入``Ctrl+C``。然后确保turtlesim窗口可见,这样你就可以看到bag文件的效果。 输入以下命令: ros2 bag play subset终端将返回以下消息: [INFO] [rosbag2_storage]: Opened database 'subset'.当您录制时,您的海龟将按照您输入的相同路径移动(尽管不是100%准确;turtlesim对系统时间的微小变化敏感)。 因为“subset”文件记录了“/turtle1/pose”主题,所以“ros2 bag play”命令将保持运行,直到您停止turtlesim,即使您没有移动海龟。 这是因为只要“/turtlesim”节点处于活动状态,它就会定期发布“/turtle1/pose”主题的数据。您可能已经注意到上面的“ros2 bag info”示例结果中,“/turtle1/cmd_vel”主题的“Count”信息只有9次;这是我们在录制过程中按下箭头键的次数。 请注意,“/turtle1/pose”主题的“Count”值超过3000;在我们录制时,该主题的数据发布了3000次。 要了解位置数据发布的频率,可以运行以下命令: ros2 topic hz /turtle1/pose 总结您可以使用``ros2 bag``命令记录ROS 2系统中传递的数据。无论是与他人分享您的工作还是审查自己的实验,这是一个很好的工具。 下一步您已完成“入门:CLI工具”教程!下一步是开始解决“入门:客户端库”教程,从 创建一个工作空间 开始。 相关内容关于``ros2 bag``的更详细说明可以在此处的README 链接 中找到。有关QoS兼容性和``ros2 bag``的更多信息,请参阅 rosbag2:覆盖 QoS 策略。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |